본문으로 건너뛰기

Deadlock

Deadlock이란 process가 서로의 자원(CPU, 메모리, IO 기기)을 기다리며 무한정 대기 상태에 빠지는 상황을 말한다.

🧑🏻‍💻 교착 상태 원인 네 가지


아래 네 가지 조건을 모두 만족하면 교착 상태가 나타난다.

✅ 상호 배제

  • mutual exclusion
  • 자원을 동시에 공유할 수 없는 상태를 뜻한다.
  • 다른 process가 자원을 사용하려면 자원이 방출될 때까지 기다려야 한다.

✅ 점유와 대기

  • hold and wait
  • 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태를 뜻한다.

✅ 비선점

  • no preemption
  • 우선권이 없어서 다른 process가 사용 중인 자원을 강제로 빼앗지 못하는 상태를 뜻한다.

✅ 원형 대기

  • circular wait
  • process들이 원의 형태로 서로의 자원을 대기하는 상태를 뜻한다.

✅ 자원 할당 그래프

  • 위 조건들은 process와 자원의 상태를 나타낸 그래프로 표현하면 다음과 같다.

    자원 할당 그래프

    교착 상태 = 상호 배제 + 점유와 대기 + 비선점 + 원형 대기 = 자원 할당 그래프의 형태가 원

    • 자원 = 사각형
    • process = 원
    • 사용할 수 있는 자원의 개수 = 사각형 안 점의 개수
    • 자원을 할당받음 = 자원에서 process로 화살표 표시
    • 자원을 기다림 = process에서 자원으로 화살표 표시

🧑🏻‍💻 교착 상태 해결법 네 가지


✅ 예방 방식

교착 상태 원인 네 가지 중 하나가 성립하지 않게 하는 방법으로 교착 상태를 해결한다.

✏️ 상호 배제 해결하기

  • 자원을 동시에 공유할 수 없는 상태 ↔ 자원을 동시에 공유할 수 있게 해준다.

  • 하지만 프린터와 같이 동시에 사용할 수 없는 경우도 발생한다.

✏️ 점유와 대기 해결하기

  • 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태 ↔ 특정 process에만 자원을 점유시켜 대기를 없앤다.

  • 하지만 자원을 효율적으로 사용하기 힘들다.

✏️ 비선점 해결하기

  • 어떤 process도 다른 process의 자원을 강제로 빼앗지 못하는 상태 ↔ 선점형으로 process 관리한다.

  • 하지만 모든 자원이 선점할 수 있는 것은 아니다.

✏️ 원형 대기 해결하기

  • process들이 원의 형태로 서로의 자원을 대기하는 상태 ↔ 모든 자원에 우선순위를 부여하여 우선순위가 높은 자원은 대기할 수 없게 한다.

  • 우선순위를 붙이는 작업이 따로 필요하고 우선순위가 낮은 작업이 계속 실행되지 않을 수 있다.

✅ 회피 방식

process에 자원을 할당할 때 교착 상태가 발생하는 할당량을 파악하여 그 수준 이하로 자원을 나누어주는 방법이다.

✅ 검출 후 회복 방식

시스템 검사를 통해 deadlock 발생을 탐지하고, 이를 회복시키는 방법이다.

✏️ 선점을 통한 회복

  • 교착 상태가 해결될 때까지 한 process씩 자원을 몰아 주는 방법이다.

✏️ process 강제 종료

  • 모두 강제 종료 시 → 작업 내역을 잃을 수 있다.
  • 하나씩 강제 종료 시 → 잦은 확인으로 오버헤드 가능성 높다.

✅ 무시

deadlock 발생 확률이 낮은 시스템에서 주로 사용하며, 아무런 조치도 취하지 않고 deadlock을 무시하는 방법이다.


참고 자료

  • 혼자 공부하는 컴퓨터구조 + 운영체제